<?php

/*
 * This file is part of SwiftMailer. (c) 2004-2009 Chris Corbyn For the full copyright and license information, please view the LICENSE file that was distributed with this source code.
 */

/**
 * Buffers input and output to a resource.
 * 
 * @package Swift
 * @subpackage Transport
 * @author Chris Corbyn
 */
interface Swift_Transport_IoBuffer extends Swift_InputByteStream, Swift_OutputByteStream {
	/**
	 * A socket buffer over TCP
	 */
	const TYPE_SOCKET = 0x0001;
	
	/**
	 * A process buffer with I/O support
	 */
	const TYPE_PROCESS = 0x0010;
	
	/**
	 * Perform any initialization needed, using the given $params.
	 * Parameters will vary depending upon the type of IoBuffer used.
	 * 
	 * @param array $params        	
	 */
	public function initialize(array $params);
	
	/**
	 * Set an individual param on the buffer (e.g.
	 * switching to SSL).
	 * 
	 * @param string $param        	
	 * @param mixed $value        	
	 */
	public function setParam($param, $value);
	
	/**
	 * Perform any shutdown logic needed.
	 */
	public function terminate();
	
	/**
	 * Set an array of string replacements which should be made on data written
	 * to the buffer.
	 * This could replace LF with CRLF for example.
	 * 
	 * @param string[] $replacements        	
	 */
	public function setWriteTranslations(array $replacements);
	
	/**
	 * Get a line of output (including any CRLF).
	 * The $sequence number comes from any writes and may or may not be used
	 * depending upon the implementation.
	 * 
	 * @param int $sequence
	 *        	of last write to scan from
	 * @return string
	 */
	public function readLine($sequence);
}
